package Question9_7; import java.util.ArrayList; import java.util.*; public class Question { ArrayList<HtWt> items; ArrayList<HtWt> lastFoundSeq; ArrayList<HtWt> maxSeq; // Returns longer sequence ArrayList<HtWt> seqWithMaxLength(ArrayList<HtWt> seq1, ArrayList<HtWt> seq2) { return seq1.size() > seq2.size() ? seq1 : seq2; } // Fills next seq w decreased wts - returns index of 1st unfit item. int fillNextSeq(int startFrom, ArrayList<HtWt> seq) { int firstUnfitItem = startFrom; if (startFrom < items.size()) { for (int i = 0; i < items.size(); i++) { HtWt item = items.get(i); if (i == 0 || items.get(i-1).isBefore(item)) { seq.add(item); } else { firstUnfitItem = i; } } } return firstUnfitItem; } // Find the maximum length sequence void findMaxSeq() { Collections.sort(items); int currentUnfit = 0; while (currentUnfit < items.size()) { ArrayList<HtWt> nextSeq = new ArrayList<HtWt>(); int nextUnfit = fillNextSeq(currentUnfit, nextSeq); maxSeq = seqWithMaxLength(maxSeq, nextSeq); if (nextUnfit == currentUnfit) break; else currentUnfit = nextUnfit; } } public void initialize() { items = new ArrayList<HtWt>(); lastFoundSeq = new ArrayList<HtWt>(); maxSeq = new ArrayList<HtWt>(); HtWt item = new HtWt(65, 60); items.add(item); item = new HtWt(70, 150); items.add(item); item = new HtWt(56, 90); items.add(item); item = new HtWt(75, 190); items.add(item); item = new HtWt(60, 95); items.add(item); item = new HtWt(68, 110); items.add(item); } public void printList(ArrayList<HtWt> list) { for (HtWt item : list) { System.out.println(item.toString() + " "); } } public void printResult() { printList(maxSeq); } public static void main(String[] args) { Question q = new Question(); q.initialize(); q.findMaxSeq(); q.printResult(); } }